package com.lxxin.utils;

import com.vladsch.flexmark.ext.attributes.AttributesExtension;
import com.vladsch.flexmark.ext.footnotes.FootnoteExtension;
import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughSubscriptExtension;
import com.vladsch.flexmark.ext.gfm.tasklist.TaskListExtension;
import com.vladsch.flexmark.ext.ins.InsExtension;
import com.vladsch.flexmark.ext.superscript.SuperscriptExtension;
import com.vladsch.flexmark.ext.tables.TablesExtension;
import com.vladsch.flexmark.html.HtmlRenderer;
import com.vladsch.flexmark.parser.Parser;
import com.vladsch.flexmark.util.ast.Node;
import com.vladsch.flexmark.util.data.DataHolder;
import com.vladsch.flexmark.util.data.MutableDataSet;

import java.util.Arrays;

public class MarkDown2HtmlUtils {

    public static String markdown2Html(String content) {
        String html = parse(content);
        return html;
    }

    public static String parse(String content) {
        DataHolder options = new MutableDataSet()
                .set(FootnoteExtension.FOOTNOTE_REF_PREFIX, "[")
                .set(FootnoteExtension.FOOTNOTE_REF_SUFFIX, "]")
                .set(Parser.EXTENSIONS, Arrays.asList(
                        AttributesExtension.create(),   //属性拓展 {...} => #id-ids, .class-cls, name=xx, name="xx"
                        TablesExtension.create(),       //表格拓展
                        TaskListExtension.create(),     //任务列表拓展
                        FootnoteExtension.create(),     //脚注拓展
                        InsExtension.create(),          //下划线拓展
                        SuperscriptExtension.create(),  //上标拓展
                        StrikethroughSubscriptExtension.create()   //下标/删除线 拓展
                ));
        Parser parser = Parser.builder(options).build();
        HtmlRenderer renderer = HtmlRenderer.builder(options).build();
        Node document = parser.parse(content);
        return renderer.render(document);
    }
}
